package portal.web.servlets;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import portal.vo.ProductoVO;
import portal.web.order.ListaProductosSortComparator;

@SuppressWarnings("serial")
public class OrdenarColumnaServlet extends HttpServlet {

	private static Logger logger = Logger.getLogger(OrdenarColumnaServlet.class);
	
	public static final String COL_CAT = "COL_CAT"; //columna categoria
    public static final String COL_FECHA = "COL_FECHA"; //columna fecha
    public static final String COL_PRECIO = "COL_PRECIO"; //columna precio
    public static final String COL_RANK = "COL_RANK"; // columna ranking

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		processRequest(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		processRequest(req, resp);
	}

	private void processRequest(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>OrdenarColumnaServlet<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
		
		String columna = req.getParameter("columna");
		int tipoOrden = Integer.parseInt((String)req.getParameter("tipoOrden"));
		
		List<ProductoVO> listado = (List<ProductoVO>) req.getSession().getAttribute("listaProductos");
		
		if (COL_CAT.equals(columna)) {
			logger.debug("Ordeno por Categoria");
			listado = this.ordenarPorCategoria(tipoOrden, listado);
	        } else if (COL_FECHA.equals(columna)) {
	        	logger.debug("Ordeno por Fecha");
	        	listado = this.ordenarPorFecha(tipoOrden, listado);
	        } else if (COL_PRECIO.equals(columna)) {
	        	logger.debug("Ordeno por Precio");
	        	listado = this.ordenarPorPrecio(tipoOrden, listado);
	        } else if (COL_RANK.equals(columna)) {
	        	logger.debug("Ordeno por Ranking");
	        	listado = this.ordenarPorRanking(tipoOrden, listado);
	        } 
		
		req.getSession().setAttribute("listaProductos", listado);

		req.getRequestDispatcher("/jsp/listaDeProductos.jsp").forward(req, resp);

	}
	
	public List<ProductoVO> ordenarPorCategoria(int tipoOrdenamiento, List<ProductoVO> listado) {

        ListaProductosSortComparator comparador = new ListaProductosSortComparator();
        comparador.setSortPorCategoria(true);
        comparador.setSortType(tipoOrdenamiento);
        Collections.sort(listado, comparador);
        return listado;
    }
	
	public List<ProductoVO> ordenarPorFecha(int tipoOrdenamiento, List<ProductoVO> listado) {

        ListaProductosSortComparator comparador = new ListaProductosSortComparator();
        comparador.setSortPorFecha(true);
        comparador.setSortType(tipoOrdenamiento);
        Collections.sort(listado, comparador);
        return listado;
    }
	
	public List<ProductoVO> ordenarPorPrecio(int tipoOrdenamiento, List<ProductoVO> listado) {

        ListaProductosSortComparator comparador = new ListaProductosSortComparator();
        comparador.setSortPorPrecio(true);
        comparador.setSortType(tipoOrdenamiento);
        Collections.sort(listado, comparador);
        return listado;
    }
	
	public List<ProductoVO> ordenarPorRanking(int tipoOrdenamiento, List<ProductoVO> listado) {

        ListaProductosSortComparator comparador = new ListaProductosSortComparator();
        comparador.setSortPorRanking(true);
        comparador.setSortType(tipoOrdenamiento);
        Collections.sort(listado, comparador);
        return listado;
    }
}
